package org.lanqiao.tjut.db;
import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;







public class DBDriver {
	/**
	 * dbutils-beanlist查询
	 * @param sql 查询语句
	 * @param rsh 查询结果结构handler
	 * @return 查询结果
	 */
public <T> T query(String sql,ResultSetHandler<T> rsh){
		//List lst=null;
		T lst =null;
		try {
			//QueryRunner qr =new QueryRunner(DBDataSource.getDataSource());

			//支持占位符?------------------
			QueryRunner qr =new QueryRunner(DBDataSource.getDataSource(),true);
             //git.oschina.net/MEW12/Test0815.git
			//lst=(List)qr.query(sql,rsh);
			lst=qr.query(sql,rsh);
		} catch (SQLException e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		//return (T) lst;
		return lst;
	}
/**
 * 
 * @param sql 查询语句
 * @param rsh 结果handler
 * @param params 查询参数
 * @return 结果集
 */
public <T> T query(String sql,ResultSetHandler<T> rsh,Object...params){
	//List lst=null;
	T lst =null;
	try {
		QueryRunner qr =new QueryRunner(DBDataSource.getDataSource());
		//lst=(List)qr.query(sql,rsh);
		lst=qr.query(sql,rsh,params);
	} catch (SQLException e) {
		// TODO: handle exception
		e.printStackTrace();
	}
	//return (T) lst;
	return lst;
}
/**
 * 新增和修改操作
 * @param sql 更新语句
 * @param params 参数集合
 * @return 所影响的记录条数
 */
public int update(String sql,Object...params){
	int re_i=0;
	try {
		QueryRunner qr=new QueryRunner(DBDataSource.getDataSource());
		re_i=qr.update(sql, params);
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	return re_i;
}
/**
 * 新增和批改处理操作
 * @param sql 更新语句
 * @param params 参数集合
 * @return 批处理所影响的记录条数
 */
public int[] batch(String sql,Object[][] params){
	int[] re_i=null;
	try {
		QueryRunner qr=new QueryRunner(DBDataSource.getDataSource());
		re_i=qr.batch(sql, params);
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	return re_i;
}   
    /**
     * 新增数据并返回新增结果对象
     * @param sql 新增语句
     * @param rsh 新增语句handler
     * @param params 参数集合
     * @return 新增的结果对象
     */
	public <T> T insert(String sql,ResultSetHandler<T> rsh,Object...params){
		T t=null;
        try {
        	QueryRunner qr=new QueryRunner(DBDataSource.getDataSource());
			t=qr.insert(sql, rsh, params);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
		return t;
	}
}